/*
 *  mooneyrivlin.h
 *  EPPI-0.0
 *
 *  Created by Sergio Conde on 14/02/2013.
 *
 */
 
#ifndef _mooneyrivlin_h_
#define _mooneyrivlin_h_

#include <iostream>
#include "hyperelasticinvariants.h"

using namespace std;

class MooneyRivlin : public HyperelasticInvariants
{
public:
//	double E;			// Young's Modulus
//	double nu;			// Poison constant
//	double lambda;		// Lamé constant
//	double mu;			// Shear Modulus
//	double K;			// Bulk Modulus
	string typeVol;
	double b;			// volumetric function parameter
	double c1;          // First material parameter
    double c2;          // Second material parameter

/*	Data members from the base class Material
	string name;
	double density;
	vector< vector<double> > Ct;	// Linearized constitutive tensor
*/
	
public:
        MooneyRivlin();
        MooneyRivlin(ifstream &, const string &, const string &);
        ~MooneyRivlin(){}
	
        // Virtual functions from Hyperelastic base: Material's definition
	
        void strainEnergy();		// Strain energy
        void DstrainEnergy();		// First derivatives of Strain energy respect to the invariants
        void DDstrainEnergy();		// Second derivatives of Strain energy respect to the invariants
        void DDDstrainEnergy();		// Third derivatives of Strain energy respect to the invariants
	
        // Virtual functions from Material base: Getting material properties
//        double getE();
//        double getNu();
//        double getLambda();
//        double getMu();
//        double getDensity();
//        double getBulkmodulus();

        /** Local functions */

};

#endif	
